Software systems and programs have traditionally been developed based on requirements set with the goal of providing users tools to accomplish specific tasks with task-specific data. As a result, software systems and programs provide functionality silos, which require users to traverse user interfaces, applications, and datasets to accomplish tasks for which requirements have not been considered when developing the software. Further, tasks users perform generally adapt over time with respect to evolving practices and changing business conditions. Constantly adapting software and specializing design for each potential situation is overly time consuming and expensive.